<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2020-09-28
 * Time: 15:01
 */

namespace app\logic\ext;



use app\api\model\Wxapp;
use app\logic\model\WxappModel;
use think\facade\Cache;
use app\logic\ext\HttpRequest;

class WxBizDataCrypt
{
    private $appid;
    private $sessionKey;
    /**
     * 构造函数
     * @param $sessionKey string 用户在小程序登录后获取的会话密钥
     * @param $appid string 小程序的appid
     */
    public function __construct($appid, $sessionKey)
    {
        $this->sessionKey = $sessionKey;
        $this->appid = $appid;
        $this->HttpRequest=new HttpRequest();
    }


    /**
     * 检验数据的真实性，并且获取解密后的明文.
     * @param $encryptedData string 加密的用户数据
     * @param $iv string 与用户数据一同返回的初始向量
     * @param $data string 解密后的原文
     *
     * @return int 成功0，失败返回对应的错误码
     */
    public function decryptData( $encryptedData, $iv, &$data )
    {
        if (strlen($this->sessionKey) != 24) {
            return ErrorCode::$IllegalAesKey;
        }
        $aesKey=base64_decode($this->sessionKey);


        if (strlen($iv) != 24) {
            return ErrorCode::$IllegalIv;
        }
        $aesIV=base64_decode($iv);

        $aesCipher=base64_decode($encryptedData);

        $result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);

        $dataObj=json_decode( $result );
        if( $dataObj  == NULL )
        {
            return ErrorCode::$IllegalBuffer;
        }
        if( $dataObj->watermark->appid != $this->appid )
        {
            return ErrorCode::$IllegalBuffer;
        }
        $data = $result;
        return ErrorCode::$OK;
    }

    public function getAccessToken(){
        $access_token=Cache::store("file")->get("wx_access_token");
        if(empty($access_token)){
            $config = WxappModel::find(1)->toArray();
            $appid = $config['appid'];
            $appsecret = $config['appsecret'];
            $data = [
                'appid' => $appid,//appid
                'secret' => $appsecret,//appsecret
                'grant_type' => 'client_credential'//微信授权类型,官方文档定义为 ： client_credential
            ];
            $result = $this->HttpRequest->curl_get('https://api.weixin.qq.com/cgi-bin/token', $data);
            $res=json_decode($result,true);
            $_token['access_token']=$res['access_token'];
	    	$_token['expires_in']=time()+$res['expires_in'];
	    	Cache::set('accessToken',$_token);
            dump($res);die;
        }
    }


}